package commongame.core;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import games.patience.core.*;
import commomgame.Card;
import commomgame.Region;
import commomgame.SubRegion;
import java.util.List;

/**
 * Classe que representa a região de reservas do Jogo de Paciência
 *
 * @author Fernanda & Igo
 */
public abstract class RegionOfReserves extends Region {

    /**
     * Configura o número de subregiões da região de reservas e invoca método para nomear cada uma destas subregiões
     * @param numberOfSubRegions Representa o número de subregiões da região de reservas
     */
    public RegionOfReserves(int numberOfSubRegions) {
        super(numberOfSubRegions);
        this.rulesOfMovement = new RulesOfReserves();
        //this.setNameOfSubRegions();
    }

    /**
     * Define os nomes de todas as subregiões da região de reservas
     */
    public void setNameOfSubRegions() {
        String name = "";
        for (int i = 1; i <= this.numberOfSubRegions; i++) {
            name = "R";
            this.getRegion().get(i - 1).setName(name += i);
        }
    }

    /**
     * Método que distribui parte do baralho na região de reservas
     *
     * @param numberOfCards Representa o número de cartas da região de reservas
     * @param partOfDeck Representa parte do baralho que compõe a região de reservas
     */
    public abstract void sendCardsToRegion2(int numberOfCards, List<Card> partOfDeck);
    public void sendCardsToRegion(int numberOfCards, List<Card> partOfDeck, String jogo) {

        int delimitador = 1;
        int ponteiro = 0;

        if (jogo.equals("paciencia")) {
            for (int i = 0; i < getNumberOfSubRegions(); i++) {
                for (int j = 0; j < delimitador; j++) {

                    if (j == delimitador - 1) {
                        partOfDeck.get(ponteiro).setIsShowed(true);
                    }

                    this.getRegion().get(i).addCardInSubRegion(partOfDeck.get(ponteiro));
                    ponteiro++;
                }

                delimitador++;
            }
        } else if (jogo.equals("freecell")) {
            for (int i = 0; i < getNumberOfSubRegions(); i++) {
                if (i < 4) {
                    for (int j = 0; j < 7; j++) {
                        partOfDeck.get(ponteiro).setIsShowed(true);
                        this.getRegion().get(i).addCardInSubRegion(partOfDeck.get(ponteiro));
                        ponteiro++;
                    }
                } else {
                    for (int j = 0; j < 6; j++) {
                        partOfDeck.get(ponteiro).setIsShowed(true);
                        this.getRegion().get(i).addCardInSubRegion(partOfDeck.get(ponteiro));
                        ponteiro++;
                    }
                }
            }
        }

    }

    /**
     * Método invocado quando usuário movimenta carta tendo a região de reservas como destino
     *
     * @param value Representa o valor da carta escolhida pelo usuário para movimentação
     * @param nipe Representa o nipe da carta escolhida pelo usuário para movimentação
     * @param subRegionOrigin Representa a região de origem da carta
     * @param subRegionTarget Representa a região de destino da carta: região de reservas
     * @return permissão de movimentação da carta
     */
    //public abstract boolean verifyRule(int value, String nipe, SubRegion subRegionOrigin, SubRegion subRegionTarget);
    public boolean verifyRule(int value, String nipe, SubRegion subRegionOrigin, SubRegion subRegionTarget) {
        return rulesOfMovement.verifyMovement(value, nipe, subRegionOrigin, subRegionTarget);
   //     if (rulesOfMovement.verifyMovement(value, nipe, subRegionOrigin, subRegionTarget)) {
   //         subRegionTarget.addCardInSubRegion(subRegionOrigin.selectCard(value, nipe));
   //         subRegionOrigin.removeCard(subRegionOrigin.selectCard(value, nipe));
   //         return true;
   //     } else {
   //         return false;
   //     }
    }
}
